home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 / Ham Radio 2000.iso / ham2000 / packet / terminal / top_152 / src152.exe / rar / TOPLOG.PAS < prev    next >
Pascal/Delphi Source File  |  1995-05-16  |  7KB  |  281 lines

  1. (*
  2. Dieses Programm ist nicht von mir, sondern stammt von DL5FBD.
  3. Es dient zum Ausdruck der TOP-Logbuchdatei (LOG.TOP).
  4. Allerdings ist das Programm wenig getestet und muss gegebenfalls
  5. angepasst werden.
  6. *)
  7.  
  8. {LOGPRINT bietet folgende Moeglichkeiten:
  9.  
  10.         1. Formattierter Druck von SP.LOG auf EPSON-komp. Druckern
  11.  
  12.            Der Druck wird in Blaettern zu je 67 Zeilen formattiert und
  13.            die 5 SP.LOG Kopfzeilen am Anfang jeder jedes Blatt ausgedruckt.
  14.  
  15.         2. Anpositionieren einer gewuenschten Druckseite und Druck der 
  16.            Restdatei inklusiv dieser Seite.
  17.  
  18.  
  19. Der Aufruf ist:
  20.  
  21.           LOGPRINT <Datei>                fuer kompletten Ausdruck einer SP.LOG
  22.  
  23.           LOGPRINT <Datei> (Druckseite)   fuer Ausdruck ab Seite (Druckseite)
  24.  
  25. Sofern die Environmentvariable SPDIR gesetzt ist, wird SP.LOG in der darin de-
  26. finierten Directory gesucht. Ist SPDIR nicht gesetzt so wird in der aktuellen
  27. Directory gesucht.
  28.  
  29. 73 de Gerd Michael}
  30.  
  31.  
  32. {-------------------------------------------------------------------------}
  33. {LOGPRINT 22.07.90 DL5FBD                                                 }
  34. {                                                                         }
  35. {Druckutility zum Ausdruck der SP.LOG Datei                               }
  36. {Erlaubt den Ausdruck von SP.LOG in Seiten formattiert wobei die          }
  37. {Kopfzeilen am Anfang jeder Seite wiederholt werden.                      }
  38. {                                                                         }
  39. {Das Programm erlaubt die Positionierung auf eine gewuenschte Druckseite  }
  40. {mittels eines Suchlaufs.                                                 }
  41. {                                                                         }
  42. {22.07.90 DL5FBD                                                          }
  43. {-------------------------------------------------------------------------}
  44.  
  45. Program LOGPRT;
  46.  
  47. USES Printer;
  48.  
  49. CONST  TopOfForm    = 0;
  50.        TextFenster  = 50;
  51.        AnzKopfzeil  = 3;
  52.        unwichtig    = 10;
  53.  
  54. VAR    Datei       : Text;
  55.        Name        : STRING[70];
  56.        Seite       : Word;
  57.        Seiten      : Word;
  58.        Zeilen      : Byte;
  59.        I           : Byte;
  60.        Test        : Integer;
  61.        Zeile       : String[140];
  62.        Start       : String[80];
  63.        Ende        : String[80];
  64.        CRLF        : String[2];
  65.        SeitS       : String[5];
  66.        Fett       : String[10];
  67.        Normal       : String[10];
  68.        Kopfzeile   : Array[1..5] of STRING;
  69.        Formfeed    : String[1];
  70.  
  71.  
  72. FUNCTION GetEnv (EnvVar : String) : String;
  73.  
  74. TYPE
  75.   EnvPtr   = Word;
  76.  
  77. VAR
  78.   Enviro   : ^EnvPtr;
  79.   Offset   : Word;
  80.   I        : Byte;
  81.   S        : String;
  82.  
  83. BEGIN
  84.   GetEnv := '';
  85.   IF Length(EnvVar) = 0 THEN Exit;
  86.   FOR I := 1 TO Length(EnvVar) DO EnvVar[I] := UpCase(EnvVar[I]);
  87.   EnvVar := EnvVar + '=';
  88.   Enviro := Ptr(PrefixSeg,$2C);
  89.   Offset := 0;
  90.   S := '';
  91.   Repeat
  92.     S:='';
  93.  
  94.     {Environmentstring komplett extrahieren}
  95.     While Mem[Enviro^:Offset] > 0 DO
  96.       BEGIN
  97.         S := S+UpCase(Chr(Mem[Enviro^:Offset]));
  98.         INC (Offset);
  99.       END;
  100.  
  101.    {Ist die Environmentvariable vorhanden ??}
  102.    {Dann Zuweisungsteil holen und beenden !}
  103.     IF (Pos(EnvVar,S) = 1) THEN
  104.       BEGIN 
  105.         GetEnv := Copy(S,Pos('=',S)+1,Length(S));
  106.         EXIT;
  107.       END;
  108.  
  109.     Inc(Offset);
  110.  
  111.   {Endekennung Environmentvariablenbereich}
  112.   Until       (Mem[Enviro^:Offset] = 0)
  113.           AND (Mem[Enviro^:Offset+1] = 1)
  114.           AND (Mem[Enviro^:Offset+2] = 0);
  115. END;
  116.  
  117.  
  118. Function GetDIR(Pfad:String):String;
  119.  
  120. VAR   Dummi  :String[70];
  121.  
  122. BEGIN
  123.   Dummi:=GetEnv(Pfad);
  124.   IF LENGTH(Dummi) >0 THEN Dummi:=Dummi+'\';
  125.   GETDIR:=Dummi;
  126. END;
  127.  
  128.  
  129. Procedure DefiniereDruckervariable;
  130.  
  131. Begin
  132.   CRLF  :=chr(13)+chr(10);        {Zeilenabschluss CR+LF}
  133.   Formfeed:=chr(12);                    {Seitenvorschub}
  134.   Start :=chr(27)+'@';            {Drucker-Reset}
  135.   {Start :=Start+chr(27)+chr(25)+'T'+'1';}{Druckbeginn Einzelblatteinzug Zeile 1}
  136.   Start :=Start+chr(27)+chr(15);    {Eliteschrift 96 Zeichen/Zeile}
  137.   {Start :=Start+chr(27)+'l'+chr(1);}    {Heftrand 1 Zeichen}
  138.   Ende  :=chr(27)+'@';            {Drucker-Reset}
  139.   Fett  :=chr(27)+'E';            {Fettschrift ein}
  140.   Normal:=chr(27)+'F';            {Fettschrift aus}
  141. END;
  142.  
  143.  
  144. Procedure Druckstring(AusZeile :String);
  145.  
  146. VAR K  :Byte;
  147.     Z  :CHAR;
  148. Begin
  149.  
  150.   FOR K:=1 TO LENGTH(AusZeile) DO
  151.     BEGIN
  152.       Z:=AusZeile[K];
  153.       Repeat
  154.         {$I-} Write(LST,Z); {$I+}
  155.       Until IOResult=0;
  156.     END;
  157. END;
  158.  
  159.  
  160. Procedure DruckKopf;
  161.  
  162.    Begin
  163.        Begin
  164.          DruckString(Fett+Name+'    ');
  165.          STR(Seite,SeitS);
  166.          DruckString('Seite: '+SeitS+CRLF);
  167.          Writeln(crlf,crlf);
  168.          Writeln(Name+'    Seite: '+SeitS);
  169.          FOR I:=1 to AnzKopfZeil-1 DO
  170.            BEGIN
  171.              Druckstring(Kopfzeile[I]+CRLF);
  172.              Writeln(Kopfzeile[I]);
  173.            END;
  174.          Druckstring(Normal);
  175.          Zeilen:=AnzKopfZeil;
  176.        END;
  177.    END;
  178.  
  179. BEGIN
  180.  
  181.   DefiniereDruckervariable;
  182.  
  183.   IF ParamCount>=1 THEN Name:=ParamStr(1)
  184.   ELSE
  185.     BEGIN
  186.       Writeln;
  187.       Writeln('LOGPRINT  - Formattierter Ausdruck der SP-Log-Datei');
  188.       Writeln('            22.07.90 DL5FBD');
  189.       Writeln;
  190.       Writeln('Aufruf:     LOGPRINT <Dateiname> [Druckseite]');
  191.       Writeln;
  192.       Halt;
  193.     END;
  194.  
  195.   Assign(Datei,GETDIR('SPDIR')+Name);
  196.   {$I-} Reset(Datei); {$I+}
  197.   If IOResult<>0 THEN
  198.     BEGIN
  199.       Writeln;
  200.       Writeln(GETDIR('SPDIR'),Name,' nicht gefunden!');
  201.       Writeln;
  202.       Halt;
  203.     END;
  204.  
  205.   FOR I:=1 to unwichtig DO Readln(Datei);
  206.   FOR I:=1 to AnzKopfZeil-1 DO Readln(Datei,Kopfzeile[I]);
  207.  
  208.   DruckString(Start);
  209.  
  210.   IF ParamCount=2 THEN
  211.     BEGIN
  212.       Zeile:=ParamStr(2);
  213.       VAL(Zeile,Seite,Test);
  214.       IF Test <>0 THEN
  215.         BEGIN
  216.           Writeln;
  217.           Writeln('Fehlerhafte Druckseitenangabe!');
  218.           Writeln;
  219.           Halt;
  220.         END;
  221.       Seite:=Seite-1
  222.     END
  223.   ELSE Seite:=0;
  224.  
  225.   IF Seite>0 THEN
  226.     BEGIN
  227.       Seiten:=0;
  228.       Writeln;
  229.       Repeat
  230.         INC(Seiten);
  231.         Write('Positionierung steht auf Seite ',Seiten+1,CHR(13));
  232.         Zeilen:=AnzKopfZeil;
  233.  
  234.         Repeat
  235.           Readln(Datei,Zeile);
  236.           INC(Zeilen);
  237.         Until (Eof(Datei)) OR (Zeilen=Textfenster);
  238.  
  239.       Until Eof(Datei) OR (Seiten=Seite);
  240.  
  241.       IF Eof(Datei) THEN
  242.         BEGIN
  243.           Writeln;
  244.           Writeln('Fehlerabbruch! Das Ende der Logdatei wurde vor der');
  245.           Writeln('               Leseposition der Druckseite erreicht!');
  246.           Writeln;
  247.           Halt;
  248.         END;
  249.     END;
  250.  
  251.   Repeat                                 { Druckschleife }
  252.  
  253.     IF TopOfForm>0 THEN For I:=1 TO TopOfForm DO DruckString(CRLF);
  254.  
  255.     INC(Seite);
  256.     Zeilen:=0;
  257.  
  258.     DruckKopf;                           {Kopfzeile bei Zusatzparametern}
  259.  
  260.     Repeat                               { Seitenschleife }
  261.       Readln(Datei,Zeile);
  262.       Druckstring (Zeile);
  263.       Druckstring (CRLF);
  264.       Writeln(Zeile);
  265.       INC(Zeilen);
  266.     Until (Zeilen=TextFenster) OR Eof(Datei);
  267.  
  268.     IF Zeilen=TextFenster THEN
  269.       Begin
  270.       Druckstring(Formfeed);             { Seitenvorschub }
  271.       End;
  272.  
  273.   Until Eof(Datei);
  274.  
  275.   Druckstring(Formfeed);                 { Seitenvorschub }
  276.  
  277.   DruckString(Ende);
  278.  
  279.   FiResult := CloseBin(Datei);
  280. END.
  281.